#pragma once

#ifndef FILE_SYSTEM_SCANNER
#define FILE_SYSTEM_SCANNER

/*! \file FileSystemScanner.h
	\brief Header file for FileSystemScanner class.
	
	Details.
*/

#include <string>
#include "boost/shared_ptr.hpp"
#include <vector>

#include "AbstractFileSystemScanner.h"
#include "FileInfo.h"

namespace analyzer {

	//! This class is used for finding files witch specyfic parameters.
	class FileSystemScanner : public AbstractFileSystemScanner
	{
	public:
		/*! \fn AbstractFileSystemScanner(boost::shared_ptr<AbstractFileFilter> fileFilter)
			\brief Constructor of class AbstractFileSystemScanner
		*/
		FileSystemScanner(boost::shared_ptr<AbstractFileFilter> fileFilter);
		
		/*! \fn virtual ~AbstractFileSystemScanner(void)
			\brief Destructor of class AbstractFileSystemScanner.
		*/
		~FileSystemScanner(void);

		/*! \fn virtual std::vector<FileInfo> filterFiles(std::string directory, bool includeSubDirectories) =0
			\brief Returns all the file (vector of FileInfo object) from directory matched witch file filter.
			\param directory String defining path to work directory.
			\param includeSubDirectories True - method also search subdirectories. False - method search only current directory.
			\return Vector of FileInfo objects.
		*/
		virtual std::vector<FileInfo> filterFiles(std::string directoryPath, bool includeSubDirectories);
	};

}

#endif // FILE_SYSTEM_SCANNER
